VRTC 是 Web SDK 中所有可调用方法的入口。
VRTC 可用于创建客户端和音视频流对象,以及一些相关操作。
| 类型 | 名称 |
|---|---|
| string | VERSION |
| API | 函数签名 | 描述 |
|---|---|---|
| checkSystemRequirements | () => boolean |
检查 Web SDK 对正在使用的浏览器的适配情况 |
| checkVideoPermission | (onSuccess: () => void, onFailure: () => void) => void |
检测是否有摄像头权限 |
| checkAudioPermission | (onSuccess: () => void, onFailure: () => void) => void |
检测是否有麦克风权限 |
| getDevices | (onSuccess: (devices: DeviceInstance[]) => void, onFailure: (err?: Error) => void) => void |
获取可用的媒体输入/输出设备,比如麦克风、摄像头、耳机等 |
| createClient | (options: ClientOption) => ClientInstance |
创建客户端实例 |
| createStream | (options: StreamInstance) => StreamInstance |
创建音视频流对象 |
VERSION: string
当前使用的 SDK 版本号
checkSystemRequirements(): boolean
检查 Web SDK 对正在使用的浏览器的适配情况
返回值
true: Web SDK 与当前使用的浏览器适配
false: Web SDK 与当前使用的浏览器不适配
checkVideoPermission = (onSuccess, onFailure) => {
return checkVideoPermission(onSuccess, onFailure);
};
检测是否有摄像头权限
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| onSuccess | () => void | 成功回调 | 是 | 无 |
| onFailure | () => void | 失败回调 | 是 | 无 |
checkAudioPermission = (onSuccess, onFailure) => {
return checkAudioPermission(onSuccess, onFailure);
};
setAid = (aid) => {
setAid(aid);
};
setReportEntry = (key, value) => {
return setHeader(key, value);
};
检测是否有麦克风权限
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| onSuccess | () => void | 成功回调 | 是 | 无 |
| onFailure | () => void | 失败回调 | 是 | 无 |
getDevices = (onSuccess, onFailure) \=> {
return getDevices({(devices: MediaDeviceInfo => void} onSuccess, {(err?: Error) => void} onFailure);
};
获取可用的媒体输入/输出设备,比如麦克风、摄像头、耳机等
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| onSuccess | (devices: MediaDeviceInfo) => void | 成功回调 | 是 | 无 |
| onFailure | (err?: Error) => void | 失败回调 | 是 | 无 |
MediaDeviceInfo 类型
| 属性名 | 类型 | 说明 |
|---|---|---|
| deviceId | string | 设备的标识符,每个设备唯一 |
| groupId | string | 设备的组标识符。如果两个设备属于同一物理设备,则它们具有相同的组标识符 |
| kind | string: audioinputaudiooutput videoinput |
设备的类型 |
| label | string | 设备的标签 |
createClient = (options) => {
eventLog('rtc_create_client', { message: JSON.stringify(options) });
return new Proxy(VClient(options), realClientHander);
};
创建客户端 参数
| 参数名 | 类型 | 说明 | 是否必需 | 默认值 |
|---|---|---|---|---|
| mode | string | 通讯模式。计划删除,不建议继续使用。 | 否 | live |
| role | string | 用户模式 | 否 | live |
| iceUrl | string | 工作环境 | 否 | https://rtc-access.bytedance.com/dispatch/v1/AccessInfo?Action=GetAccessInfo |
返回值 client
createStream(options: StreamOption): stream
创建音视频流对象 同一个 client 最多可以创建 2 条流,一般是一条摄像头流和一条屏幕流
参数
| 参数名 | 类型 | 说明 | 必填 |
|---|---|---|---|
| options | object | 流参数 | 是 |
Option设置
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| audio | boolean | 是否开启音频 | 是 | 无 |
| video | boolean | 是否开启视频 | 是 | |
| data | boolean | 是否传递数据 | 否 | false |
| screen | boolean | 是否为屏幕分享流 | 否 | false |
| mediaStream | mediaStream | 媒体流 由浏览器原生 API 实现,具体用法和浏览器支持情况请参考 MediaStream |
否 | |
| microphoneId | string | 麦克风设备 ID | 否 | |
| cameraId | string | 摄像头设备 ID | 否 |
注意
audio、video 和 screen 进行约束,例如,关闭音频 3A,具体用法和浏览器支持情况请参考 MediaTrackConstraints 说明。microphoneId 和 cameraId 可以从 getDevices 中获取。返回值
Client 接口提供音视频通话的核心功能,例如加入频道、发布和订阅音视频流等。
你可以通过 createClient 来创建 client 对象。一个 client 对象代表一个本地客户端。
| API | 函数签名 | 描述 |
|---|---|---|
| init | (appId: string, onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
client 初始化,核心功能是与信令服务器建立 Websocket 长连接,是所有后续操作的前提 |
| join | (token: string, roomId: string, userId: string, onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<string> |
加入房间 |
| leave | (onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
离开当前房间 |
| publish | (byteStream: StreamInstance, options?: publishOption, onFailure?: (err: Error) => void) => Promise<void> |
在当前房间发送音视频流 |
| unpublish | (byteStream: StreamInstance, onFailure?: (err: Error) => void) => Promise<void> |
停止发送音视频流 |
| subscribe | (byteStream: StreamInstance, options?: SubscribeOption, onFailure?: (err: Error) => void) => Promise<void> |
订阅远端流 |
| unsubscribe | (byteStream: StreamInstance, onFailure?: (err: Error) => void) => Promise<void> |
停止订阅 |
| getConnectionState | () => string |
获取连接状态 |
| getLocalVideoStats | (callback: (stats: { uid: LocalVideoStats; }) => void) => void |
获取本地视频流属性 |
| getLocalAudioStats | (callback: (stats: { uid: LocalAudioStats; }) => void) => void |
获取本地音频流属性 |
| getRemoteVideoStats | (callback: (stats: { uid: RemoteVideoStats; }) => void) => void |
获取远端视频流属性 |
| getRemoteAudioStats | (callback: (stats: { uid: RemoteAudioStats; }) => void) => void |
获取远端音频流属性 |
| renewToken | (token: string, onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
更新校验 token |
| setLiveTranscoding | (transcode: LiveTranscoding) => void |
设置直播推流转码 |
| startLiveStreaming | (url?: string, enableTranscoding?: boolean, onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
开启转推直播,推流到 CDN |
| stopLiveStreaming | (onSuccess?: () => void, onFailure?: (err: Error) => void) => void |
停止转推直播 |
| sendCustomMessage | (message: string, onSuccess: () => void, onFailure: (err: Error) => void) => Promise<void> |
本地用户发送消息,房间内其他用户都将收到 |
| sendMessageToUser | (uid: string, message: string) => Promise<void> |
向指定用户发送消息 |
| setBusinessId | (id: string, onFailure: (err: Error) => void) => void |
设置业务 ID,一般用于区分相同项目中的不同业务线 |
| getBusinessId | () => string |
获取业务 ID |
| on | (event: string, callback: (event: LicodeEvent) => void) => void |
监听取消监听事件 |
| off | (event: string, callback: (event: LicodeEvent) => void) => void |
取消监听取消监听事件 |
| enableAutoSubscribe | (options?: { audio: boolean; video: boolean; }) => boolean |
自动订阅音频流 |
| setUserVisibility | (visibility: boolean) => Promise<any> |
设置用户可见性 |
init(appId: string, onSuccess?: () => void, onFailure?: (err: Error) => void): void
client 初始化,核心功能是与信令服务器建立 WebSocket 长连接,是所有后续操作的前提
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| appId | string | 每个项目自带的appId | 是 | 无 |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
注意
后续操作都需要以此函数调用为前提。
join(token: string, roomId: string, userId: string, onSuccess?: () => void, onFailure?: (err: Error) => void): string
加入房间
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| token | string | 进入房间时用于校验的验证 | 是 | 无 |
| roomId | string | 需要进入的房间号 | 是 | 无 |
| userId | string | 本地用户的 ID | 是 | 无 |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise<userId>
注意
同一个 client 只可以加入一个房间。
token 与 appid 相关,每个项目可以有不同的生成逻辑。
与 leave 为逆操作。
加入大班小课功能后,可以同时创建两个 client 分别进入不同房间,但是只可以在一个房间内推流。
leave(onSuccess?: () => void, onFailure?: (err: Error) => void): promise
离开当前房间
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise
注意
与 join 为逆操作。
publish(
stream: StreamInstance,
option?: publishOption,
onFailure?: FailureFunction
): void;
在房间发布音视频流
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| stream | StreamInstance | stream 流 | 是 | 无 |
| option | publishOption | 发布设置 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
publishOption
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| maxVideoBW | number | 最大视频码率,单位是 kbps | 是 | 无 |
| minVideoBW | number | 最小视频码率,单位是 kbps | 是 | 无 |
返回值
promise
注意
1.stream 由 VRTC.createStream 来创建。
2.与 unpublish 为逆操作。
回调
成功推流会触发 stream-published 事件
unpublish(byteStream: byteStream, onFailure?: (err: Error) => void): promise
停止推流
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| byteStream | byteStream | stream 流 | 是 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise
注意
与 publish 为逆操作。
回调
成功之后远端会受到 stream-removed 事件
subscribe(byteStream: byteStream, options?: SubscribeOption, onFailure?: (err: Error) => void): promise
订阅远端流
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| byteStream | byteStream | stream 流 | 是 | |
| options | SubscribeOption | 订阅配置 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
SubscribeOption配置
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| video | boolean | 是否订阅视频 | 否 | true |
| audio | boolean | 是否订阅音频 | 否 | true |
| bigStream | boolean | 订阅大流还是小流(开启了双流推送时) | 否 | true |
返回值
promise
回调
成功订阅会触发 stream-subscribed 事件
注意
1.与 unsubscribe 为逆操作。
2.建议配合 stream-added 事件使用。
3.SubscribeOption 中 audio 与 video 不可以同时设置为 false 。
unsubscribe(byteStream: byteStream, onFailure?: (err: Error) => void): promise
停止订阅
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| byteStream | byteStream | stream 流 | 是 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise
注意
与 subscribe 为逆操作。
const on = (event, callback) => {}
监听事件
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| event | string | 需要监听的事件 | 是 | 无 |
| callback | function | 事件触发时调用的回调 | 是 | 无 |
注意
与 off 为逆操作。
const off = (event, callback) \=> {}
取消监听事件
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| event | string | 需要取消监听的事件 | 是 | 无 |
| callback | function | 需要取消调用的回调 | 是 | 无 |
注意
与 on 为逆操作。
getConnectionState(): symbol
获取连接状态
返回值
1.调用 join 之后为 CONNECTING。
2.进入房间成功后为 CONNECTED。
3.调用 leave 之后为 DISCONNECTING。
4.离开房间成功后为 DISCONNECTED。
getLocalVideoStats(callback: ({ uid: LocalVideoStats }) => void): void
获取本地视频流属性
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| callback | function | 获取流属性后触发的回调 | 是 | 无 |
LocalVideoStats详情
| 属性名 | 类型 | 说明 |
|---|---|---|
| CaptureFrameRate | number | 捕获视频帧率,单位是 fps |
| CaptureResolutionHeight | number | 捕获视频高度 |
| CaptureResolutionWidth | number | 捕获视频宽度 |
| EncodeDelay | number | 从采集到编码的延迟,单位为 ms |
| MuteState | boolean | 视频是否开启 |
| SendBitrate | number | 发送视频码率,单位为 kbps |
| SendFrameRate | number | 发送视频帧率,单位是 fps |
| SendResolutionWidth | number | 发送视频宽度 |
| SendResolutionHeight | number | 发送视频高度 |
| TotalFreezeTime | number | 总卡顿时长,单位是 s |
| TargetSendBitrate | number | 目标发送视频码率,单位是 kbps |
| TotalDuration | number | 总视频时长,单位是 s |
getLocalAudioStats(callback: ({ uid: LocalAudioStats }) => void): void
获取本地视频流属性
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| callback | function | 获取后触发的回调 | 是 | 无 |
LocalAudioStats详情
| 属性名 | 类型 | 说明 |
|---|---|---|
| CodecType | string: 'Opus' | 'AAC' | 音频编码格式 |
| MuteState | boolean | 音频是否开启 |
| RecordingLevel | number | 录制音量 |
| SendBitrate | number | 发送音频码率,单位是 kbps |
getRemoteAudioStats(callback: ({ uid: RemoteAudioStats }) => void): void
获取远端视频流属性
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| callback | function | 获取后触发的回调 | 是 | 无 |
RemoteAudioStats详情
| 属性名 | 类型 | 说明 |
|---|---|---|
| End2EndDelay | number | 发送端到接收端延迟,单位为 ms |
| TransportDelay | number | 传输延迟,单位为 ms |
| RecvLevel | number | 接收音量 |
| RecvBitrate | number | 接收码率,单位为 kbps |
| CodecType | string: 'Opus' | 'AAC' | 音频编码格式 |
| MuteState | Boolean | 音频是否开启 |
| TotalFreezeTime | number | 总卡顿时间,单位是 s |
| TotalPlayDuration | number | 总播放时长,单位是 s |
getRemoteVideoStats(callback: ({ uid: RemoteVideoStats }) => void): void
获取远端视频流属性
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| callback | function | 获取后触发的回调 | 是 | 无 |
RemoteVideoStats详情
| 属性名 | 类型 | 说明 |
|---|---|---|
| End2EndDelay | number | 发送端到接收端延迟,单位为 ms |
| TransportDelay | number | 传输延迟,单位为 ms |
| RecvBitrate | number | 接收视频码率,单位为 kbps |
| RecvResolutionWidth | number | 接收视频宽度 |
| RecvResolutionHeight | number | 接收视频高度 |
| RenderResolutionWidth | number | 渲染视频宽度 |
| RenderResolutionHeight | number | 渲染视频高度 |
| RenderFrameRate | number | 渲染视频帧率,单位是 fps |
| MuteState | boolean | 是否开启视频 |
| TotalFreezeTime | number | 总卡顿时间,单位是 s |
| TotalPlayDuration | number | 总播放时长,单位是 s |
renewToken(token: string, onSuccess?: () => void, onFailure?: (err: Error) => void): promise
更新校验 token
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| token | string | 新的校验token | 是 | |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise
注意
进入房间时传入的校验 token 有过期时间,一旦触发 token 过期,会收到 token-request 事件,请在收到此事件后重新生成 token 然后调用此函数。
setLiveTranscoding(liveTranscoding: object): void
设置直播推流转码
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| liveTranscoding | object | 转推直播参数 | 是 | 无 |
liveTranscoding属性设置
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| audioBitrate | number | 音频码率 | 否 | 48 |
| audioChannels | number: 1-5 | 声道数 | 否 | 1 |
| audioSampleRate | number: 32000/44100/48000 | 音频采样率 | 否 | 44100 |
| backgroundColor | number: 0x000000-0xffffff | 背景色 | 否 | 0x000000 |
| height | number | 视频高度 | 否 | 360 |
| lowLatency | boolean | 是否使用低延时 | 否 | false |
| videoBitrate | number | 视频码率 | 否 | 400 |
| videoFramerate | number: 1-30 | 视频帧率 | 否 | 15 |
| videoGop | number | 视频的 GOP | 否 | 30 |
| width | number | 视频宽度 | 否 | 640 |
| transcodingUsers | array | 转码合图用户 | 是 | 无 |
liveTranscoding设置示例
var LiveTranscoding = {
width: 640,
height: 360,
videoBitrate: 400,
videoFramerate: 15,
audioSampleRate: 48000,
audioBitrate: 48,
audioChannels: 1,
videoGop: 30,
transcodingUsers,
backgroundColor: 0x000000
};
transcodingUsers设置
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| alpha | number: 0-1 | 透明度 | 是 | 无 |
| height | number | 视频帧高度 | 否 | 360 |
| uid | string | 用户 ID | 否 | 无 |
| width | number | 视频帧宽度 | 否 | 640 |
| x | number | 视频帧左上角的横轴位置 | 否 | 0 |
| y | number | 视频帧左上角的纵轴位置 | 否 | 0 |
| zOrder | number | 图层编号 | 否 | 0 |
注意
请在调用 startLiveStreaming 前调用此参数。
startLiveStreaming(url: string, enableTranscoding: boolean, onSuccess: () => void, onFailure: (err: Error) => void): void
开启转推直播,推流到 CDN 成功开启转推后,请监听 live-transcoding-result 回调,如果转推过程中发生异常,等待服务端推流恢复,超时(60s)后,请调用 stopLiveStreaming 参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| url | string | 直播推流的地址 | 是 | 无 |
| enableTranscoding | boolean | 是否启用直播转码 | 否 | true |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
stopLiveStreaming(onSuccess: () => void, onFailure: (err: Error) => void): void
停止转推直播
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
sendCustomMessage(message: string|Object, onSuccess?: () => void, onFailure?: (err: Error) => void): promise
本地用户发送消息,房间内其他用户都将收到
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| message | string|Object | 需要传递的消息 | 是 | |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
返回值
promise
sendMessageToUser(uid: string|Object, message: object): promise
向指定用户发送消息
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| uid | string|Object | 用户 ID | 是 | 无 |
| message | object | 需要传递的消息 | 是 | 无 |
返回值
promise
setBusinessId(id: string, onFailure?: (err: Error) => void): void
设置业务 ID ,一般用于区分相同项目中的不同业务线
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| id | string | 业务 ID | 是 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
getBusinessId(): string
获取业务 ID
返回值
业务 ID
client.enableAudioVolumeIndicator();
开启说话者音量提示 参数 无
返回值
promise
(options?: { audio: boolean; video: boolean; }) => boolean
自动订阅音频流,默认为自动订阅。 进房前,你可以调用本接口修改订阅设置,如果进房后调用会失败。
返回值
是否调用成功
true:方法调用成功false:方法调用失败参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| options | { audio: boolean; video: boolean; } | 开始自动订阅的参数,其中,视频流包含了摄像头流和屏幕流
true:自动订阅false:不自动订阅(visibility: boolean) => Promise<any>
设置用户可见性。默认可见。 通过设置用户的可见性,可以控制用户在房间内的行为:
注意
false 切换至 true 时,房间内其他用户会监听到 peer-online 事件;true 切换至 false 时,房间内其他用户会监听到 peer-leave 事件。false,此时尝试发布流会收到 NO_PUBLISH_PERMISSION 错误码。参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| visibility | boolean | 设置用户是否对房间内其他用户可见:true: 可以被房间中的其他用户感知,且可以在房间内发布和订阅音视频流;false: 无法被房间中的其他用户感知,且只能在房间内订阅音视频流。 |
是 | 无 |
Stream 接口提供的方法用于定义音视频流对象的行为,例如流的播放控制、音视频的编码配置等。
你可以通过 createStream 创建 stream 对象。一个 stream 对象指通话中发布的本地音视频流或订阅的远端音视频流。
| API | 函数签名 | 描述 |
|---|---|---|
| init | (onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
流初始化 |
| play | (domID: string, option: PlayOption, onFailure: (err: Error) => void) => Promise<void> |
播放媒体流 |
| getMediaStream | () => MediaStream |
获取媒体流 |
| setVideoBitrate | (bitrate: [number, number]) => void |
设置视频码率 |
| setVideoProfile | (profile: string) => void |
设置视频属性,设置本地流的视频编码属性。每个属性对应一套视频参数,如分辨率、帧率、码率等 |
| setVideoEncoderConfiguration | (param: VideoOption) => void |
自定义视频编码配置,可以根据需要灵活设置本地流的视频分辨率、帧率和码率 |
| getStats | (callback: (stats: LocalStreamStats | RemoteStreamStats) => void) => void |
获取媒体流属性 |
| stop | () => void |
停止播放,但不断开媒体连接 |
| close | () => void |
关闭视频流或音频流,停止推拉流,断开 RTC 连接,取消摄像头和麦克风的访问权限并清除流属性 |
| unmuteAudio | () => boolean |
启用音频 |
| muteAudio | () => boolean |
禁用音频 |
| unmuteVideo | () => boolean |
启用视频 |
| muteVideo | () => boolean |
禁用视频 |
| getId | () => string |
获取流 ID |
| hasAudio | () => boolean |
判断当前流是否包含音频 |
| hasVideo | () => boolean |
判断当前流是否包含视频 |
| replaceTrack | (track: MediaStreamTrack, onSuccess?: () => void, onFailure?: (err: Error) => void) => Promise<void> |
替换媒体流里面的音频或者视频轨 |
| getAudioLevel | () => number |
获取当前音频能量,可以理解为音量 |
| startAudioMixing | (options: MixOption, callback?: (error?: Error) => void) => void |
开始播放音乐文件及混音 |
| stopAudioMixing | (id: number, callback?: (err: Error) => void) => void |
停止播放音乐文件及混音 |
| pauseAudioMixing | (id: number, callback?: () => void) => Promise<void> |
暂停播放音乐文件及混音 |
| resumeAudioMixing | (id: number, callback?: (err?: Error) => void) => Promise<void> |
恢复播放音乐文件及混音 |
| getAudioMixingDuration | (id: number) => number |
获取音乐文件总时长 |
| getAudioMixingCurrentPosition | (id: number) => number |
获取音乐文件播放进度 |
| setAudioMixingPosition | (id: number, targetTime: number, callbackOrigin?: () => void) => Promise<void> |
设置音乐文件音频文件的播放位置 |
| setAudioMixingVolume | (id: number, volume: number) => void |
调节音乐文件在本地和远端播放的音量大小 |
| preloadAudioMixing | (id: string, filePath: string) => Promise<void> |
预加载指定音乐文件到缓存 |
| unloadAudioMixing | (id: string) => Promise<void> |
清除预加载的音频资源 |
| enableAudioMixingBuffer | (callback?: () => void) => void |
启动外部音频流混音 |
| disableAudioMixingBuffer | () => void |
关闭外部音频流混音 |
| pushAudioMixingBuffer | (buffer: ArrayBuffer) => void |
向 SDK 推送外部音频数据 |
| getVideoTrack | () => MediaStreamTrack |
获取当前流中的视频轨道 |
| getAudioTrack | () => MediaStreamTrack |
获取当前流中的音频轨道 |
| mirror | (enabled: boolean) => void |
打开/关闭镜像 |
| enableLocalVideo | (enabled: boolean, constraints?: MediaTrackConstraints) => boolean |
开启/关闭视频采集设备 |
| enableLocalAudio | (enabled: boolean, constraints?: MediaTrackConstraints) => boolean |
开启/关闭音频采集设备 |
| switchDevice | (camerId: string, micId: string) => boolean |
切换设备 |
| setScreenParameters | ({width?: number, height?: number, frameRate?: number, bitrate?: number}) => void |
设置屏幕分享属性 |
init(onSuccess?: () => void, onFailure?: (err: Error) => void): void
流初始化
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
注意
后续操作都需要以此函数调用为前提。
play(domID: string, option?: object, onFailure?: (err: Error) => void): void
播放媒体流
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| domID | string | html 页面放置 video 标签的 dom 组件 ID | 是 | |
| option | object | 播放参数 | 否 | {} |
| onFailure | function | 失败回调 | 否 | 无 |
option详情
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| fit | string:cover/contain | video 标签的 style 属性 | 否 | 无 |
| muted | boolean | 是否静音 | 否 | false |
getMediaStream(): mediaStream
获取媒体流
返回值
mediaStream
setVideoBitRate(bitrate: array): void
设置视频码率
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| bitrate | array:[min, max] | 目标码率,单位是 kbps | 是 | 无 |
注意
1.码率设置会有一个缓步上升的过程,慢慢达到目标值。
2.如果范围设置比较窄,实际效果并不很精确。
3.请在 publish 之前调用此方法。
setVideoProfile(profile: string): void
设置视频属性,设置本地流的视频编码属性。每个属性对应一套视频参数,如分辨率、帧率、码率等
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| profile | string | 视频参数 | 是 | 无 |
profile规格
| 视频属性 | 分辨率(宽x高) | 帧率(fps) | 码率(Kbps) | Chrome | Firefox | Safari |
|---|---|---|---|---|---|---|
| 120p_1 | 160 x 120 | 15 | 65 | 支持 | ||
| 120p_3 | 120 x 120 | 15 | 50 | 支持 | ||
| 180p_1 | 320 x 180 | 15 | 140 | 支持 | ||
| 180p_3 | 180 x 180 | 15 | 100 | 支持 | ||
| 180p_4 | 240 x 180 | 15 | 120 | 支持 | ||
| 240p_1 | 320 x 240 | 15 | 200 | 支持 | ||
| 240p_3 | 240 x 240 | 15 | 140 | 支持 | ||
| 240p_4 | 424 x 240 | 15 | 220 | 支持 | ||
| 360p_1 | 640 x 360 | 15 | 400 | 支持 | ||
| 360p_3 | 360 x 360 | 15 | 260 | 支持 | ||
| 360p_4 | 640 x 360 | 30 | 600 | 支持 | ||
| 360p_6 | 360 x 360 | 30 | 400 | 支持 | ||
| 360p_7 | 480 x 360 | 15 | 320 | 支持 | ||
| 360p_8 | 480 x 360 | 30 | 490 | 支持 | ||
| 360p_9 | 640 x 360 | 15 | 800 | 支持 | ||
| 360p_10 | 640 x 360 | 24 | 800 | 支持 | ||
| 360p_11 | 640 x 360 | 24 | 1000 | 支持 | ||
| 480p_1 | 640 x 480 | 15 | 500 | 支持 | 支持 | 支持 |
| 480p_2 | 640 x 480 | 30 | 1000 | 支持 | 支持 | 支持 |
| 480p_3 | 480 x 480 | 15 | 400 | 支持 | 支持 | 支持 |
| 480p_4 | 640 x 480 | 30 | 750 | 支持 | 支持 | 支持 |
| 480p_6 | 480 x 480 | 30 | 600 | 支持 | 支持 | 支持 |
| 480p_8 | 848 x 480 | 15 | 610 | 支持 | 支持 | 支持 |
| 480p_9 | 848 x 480 | 30 | 930 | 支持 | 支持 | 支持 |
| 480p_10 | 640 x 480 | 10 | 400 | 支持 | 支持 | 支持 |
| 720p_1 | 1280 x 720 | 15 | 1130 | 支持 | 支持 | 支持 |
| 720p_2 | 1280 x 720 | 30 | 2000 | 支持 | 支持 | 支持 |
| 720p_3 | 1280 x 720 | 30 | 1710 | 支持 | 支持 | 支持 |
| 720p_5 | 960 x 720 | 15 | 910 | 支持 | 支持 | 支持 |
| 720p_6 | 960 x 720 | 30 | 1380 | 支持 | 支持 | 支持 |
| 1080p_1 | 1920 x 1080 | 15 | 2080 | 支持 | 支持 | |
| 1080p_2 | 1920 x 1080 | 30 | 3000 | 支持 | 支持 | |
| 1080p_3 | 1920 x 1080 | 30 | 3150 | 支持 | 支持 | |
| 1080p_5 | 1920 x 1080 | 60 | 4780 | 支持 | 支持 | |
| 1440p_1 | 2560 x 1440 | 30 | 4850 | 支持 | 支持 | |
| 1440p_2 | 2560 x 1440 | 60 | 7350 | 支持 | 支持 | |
| 4K_1 | 3840 x 2160 | 30 | 8910 | 支持 | 支持 | |
| 4K_3 | 3840 x 2160 | 60 | 13500 | 支持 | 支持 |
注意
1.码率,帧率和分辨率设置会有一个缓步上升的过程,慢慢达到目标值。
2.请在 publish 之前调用此方法。
setVideoEncoderConfiguration(option: object): void
自定义视频编码配置,可以根据需要灵活设置本地流的视频分辨率、帧率和码率
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| option | object | 自定义视频编码 | 是 | 无 |
option详情
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| resolution | object | 视频分辨率(宽高) | 否 | 无 |
| frameRate | object | 视频帧率(最低,最高) | 否 | 无 |
| bitrate | object | 视频码率(最低,最高,单位是 kbps) | 否 | 无 |
option示例
stream.setVideoEncoderConfiguration({
// 视频分辨率
resolution: {
width: 640,
height: 480
},
// 视频编码帧率。通常建议是 15 帧,不超过 30 帧
frameRate: {
min: 15,
max: 30
},
// 码率。一般情况下推荐使用标准码率
bitrate: {
min: 1000,
max: 5000
}
});
注意
1.码率,帧率和分辨率设置会有一个缓步上升的过程,慢慢达到目标值。
2.请在 publish 之前调用此方法。
(callback: (stats: LocalStreamStats | RemoteStreamStats) => void) => void
获取到统计触发的回调 * 当获取的是发布音视频流时,数据为 LocalStreamStats * 当获取的是订阅的音视频流时,数据为 RemoteStreamStats
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| callback | function | 获取到属性触发的回调 | 是 | 无 |
LocalStreamStats 详情
| 属性名 | 类型 | 说明 |
|---|---|---|
| accessDelay | number | 接入 SD-RTN 网络的延迟,单位为 ms |
| audioSentBytes | number | 已发送音频字节数 |
| audioSentPackets | number | 已发送音频包数 |
| audioSentPacketsLost | number | 发送音频丢包数 |
| videoSentBytes | number | 已发送视频字节数 |
| videoSentFrameRate | number | 发送视频帧率,单位是 fps |
| videoSentPackets | number | 已发送视频包数 |
| videoSentPacketsLostRate | number | 发送视频丢包率 |
| videoSentResolutionHeight | number | 视频高度 |
| videoSentResolutionWidth | number | 视频宽度 |
RemoteStreamStats 详请
| 属性名 | 类型 | 说明 |
|---|---|---|
| accessDelay | number | 接入 SD-RTN 网络的延迟,单位为 ms |
| audioReceivedBytes | number | 接收音频字节数 |
| audioReceivedDelay | number | 接收音频延迟,单位 ms |
| audioReceivedPackets | number | 接收音频包数 |
| audioReceivedPacketsLost | number | 接收音频丢包数 |
| endToEndDelay | number | 端到端延迟,单位 ms |
| videoReceivedBytes | number | 接收视频字节数 |
| videoReceivedDelay | number | 接收视频延迟,单位 ms |
| videoReceivedFrameRate | number | 接收视频帧率,单位是 fps |
| videoReceivedPackets | number | 接收视频包数 |
| videoReceivedPacketsLostRate | number | 接收视频丢包率 |
| videoReceivedResolutionHeight | number | 视频高度 |
| videoReceivedResolutionWidth | number | 视频宽度 |
stop(): void
停止播放,但不断开 RTC 连接
close(): void
关闭视频流或音频流,停止推拉流,断开 RTC 连接,取消摄像头和麦克风的访问权限并清除媒体流属性
muteAudio(): boolean
关闭音频
返回值
true: 成功
false: 失败
muteVideo(): boolean
关闭视频
返回值
true: 成功
false: 失败
unmuteAudio(): void
开启音频
返回值
true: 成功
false: 失败
unmuteVideo(): boolean
关闭视频
返回值
true: 成功
false: 失败
getId(): string
获取流 ID
返回值
当前流的 ID
hasAudio(): boolean
获取音频 flag
返回值
true:当前流有音频数据
false:当前流没有音频数据
hasVideo(): boolean
获取视频 flag
返回值
true:当前流有视频数据
false:当前流没有视频数据
replaceTrack(mediaStreamTrack: mediaStreamTrack, onSuccess?: () => void, onFailure?: (err: Error) => void): void
替换媒体流里面的音频或者视频轨
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| mediaStreamTrack | mediaStreamTrack | 媒体流轨道 | 是 | |
| onSuccess | function | 成功回调 | 否 | 无 |
| onFailure | function | 失败回调 | 否 | 无 |
注意
mediaStreamTrack 为浏览器原生 API。
getAudioLevel(): number
获取当前音频能量(可以理解为音量)
返回值
number:取值范围 0 - 255
注意
该方法获取的是当前时刻的音量。如果想表示本地或远端音量的变化,建议使用 Web API 中的 setTimeout 或者 setInterval 方法实时获取。
(options: MixOption, callback?: (error?: Error) => void) => void
开始播放音乐文件及混音
将指定音频文件和麦克风采集的音频流进行混音或用音频文件替换麦克风采集的音频流。可以通过多次调用本方法,传入不同的 ID 和 file_path 以实现同时播放多个音乐文件。
注意
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| options | MixOption | 设置参数 | 是 | 无 |
| callback | (error?: Error) => void | 结果回调 | 否 | 无 |
options 详情
| 属性名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| cacheResource | boolean | 是否缓存混音文件 | 否 | true |
| cycle | number | 指定音频文件循环播放的次数 | 否 | 1 |
| filePath | string | 指定需要混音的在线音频文件 | 是 | |
| loop | boolean | 是否循环播放 | 否 | false |
| playTime | number | 设置音频文件开始播放的时间位置,单位为 ms | 是 | |
| replace | boolean | 是否要用音频文件替换本地音频流 | 否 | false |
使用示例
stream.startAudioMixing({
filePath: 'example.mp3',
playTime: 0,
loop: true
}, function(error) {
if (error) {
// 错误处理
return;
}
// 播放成功后的流程
});
注意
支持浏览器:Safari 12 及以上版本,Chrome 65 及以上版本以及最新版 Firefox 。
(id: number, callback?: (err: Error) => void) => void
停止播放音乐文件及混音
注意
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
| callback | (err: Error) => void | 结果回调 | 否 | 无 |
(id: number, callback?: () => void) => Promise<void>
暂停播放音乐文件及混音
注意
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
| callback | () => void | 否 | 无 |
(id: number, callback?: (err?: Error) => void) => Promise<void>
恢复播放音乐文件及混音
注意 调用 PauseAudioMixing 方法暂停播放音乐文件及混音后,可以通过调用本方法恢复播放及混音。
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
| callback | (err?: Error) => void | 结果回调 | 否 | 无 |
(id: number) => number
获取音乐文件总时长
注意 调用本方法前,需要先调用 PreloadAudioMixing 或 StartAudioMixing。
返回值
音乐文件总时长
>0: 成功, 音乐文件时长,单位为毫秒。<0: 失败参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
(id: number) => number
获取音乐文件播放进度
注意 调用本方法前,需要先调用 StartAudioMixing。
返回值
音乐文件播放进度
>0: 成功, 音乐文件时长,单位为毫秒。<0: 失败参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
(id: number, targetTime: number, callbackOrigin?: () => void) => Promise<void>
设置音乐文件音频文件的播放位置 你可以根据实际情况从指定的位置播放音乐文件,无需从头到尾完整播放一个音乐文件。
注意 调用本方法前,需要先调用 StartAudioMixing。
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID | 是 | 无 |
| targetTime | number | 进度条位置,单位为毫秒。 | 是 | 无 |
| callbackOrigin | () => void | 否 | 无 |
(id: number, volume: number) => void
调节音乐文件在本地和远端播放的音量大小
注意 调用本方法前,需要先调用 PreloadAudioMixing 或 StartAudioMixing。
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | number | 混音 ID。音乐文件播放音量范围为 0~400,为保证更好的音质,建议将 volume 值设为 [0,100]。 |
是 | 无 |
| volume | number | 是 | 无 |
(id: string, filePath: string) => Promise<void>
预加载指定音乐文件到缓存 需要频繁播放某个音乐文件的时候,调用本方法预加载该文件,在播放的时候可以只加载一次该文件,减少 CPU 占用。
注意
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | string | 混音ID。 应用调用者维护,请保证唯一性。如果使用相同的 ID 重复调用本方法,后一次会覆盖前一次。如果先调用 startAudioMixing,再使用相同的 ID 调用本方法 ,会先停止上一个混音,然后加载后一个混音。例如,使用一个 ID 调用本方法预加载 A.mp3 后,如果需要使用相同的 ID 调用 startAudioMixing 播放 B.mp3,请先调用 unloadAudioMixing 卸载 A.mp3 ,否则混音播放仍为 A.mp3。 |
是 | 无 |
| filePath | string | 指定混音文件的绝对路径,支持音频文件格式有: mp3,aac等 | 是 | 无 |
(id: string) => Promise<void>
清除预加载的音频资源
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| id | string | 混音ID | 是 | 无 |
(callback?: () => void) => void
启动外部音频流混音
注意
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| callback | () => void | 否 | 无 |
() => void
关闭外部音频流混音
注意 使用 EnableAudioMixingBuffer 开启外部音频流混音后,请使用本方法关闭该混音。
(buffer: ArrayBuffer) => void
向 SDK 推送外部音频数据
注意 调用该方法前,须通过 EnableAudioMixingBuffer 启动外部音频流混音。
参数
| 参数名 | 类型 | 说明 | 是否必传 | 默认值 |
|---|---|---|---|---|
| buffer | ArrayBuffer | PCM 音频数据分片,时长大于1秒 | 是 | 无 |
getVideoTrack(): mediaStreamTrack
获取当前流中的视频轨道
返回值
视频轨道
注意
mediaStreamTrack 为浏览器原生 API。
getAudioTrack(): mediaStreamTrack
获取当前流中的音频轨道
返回值
音频轨道
注意
mediaStreamTrack 为浏览器原生 API。
mirror(enabled: boolean): void
开启/关闭本地摄像头流预览的镜像模式。
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| enable | boolean | 是否开启 | 是 | 无 |
注意 调用此接口设置不会对发布到远端的视频流进行镜像处理。
enableLocalVideo = (enable: boolean, constraints?: MediaTrackConstraints) => boolean
开启/关闭视频采集设备
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| enable | boolean | 是否开启 | 是 | 无 |
| constraints | MediaTrackConstraints | 指定设备 ID,设备 ID 可通过 getDevices 获取 | 否 | 无 |
返回值
true:成功
false:失败
enableLocalAudio = (enable: boolean, constraints?: MediaTrackConstraints) => boolean
开启/关闭音频采集设备
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| enable | boolean | 是否开启 | 是 | 无 |
| constraints | MediaTrackConstraints | 指定设备 ID,设备 ID 可通过 getDevices 获取 | 否 | 无 |
返回值
true:成功
false:失败
switchDevice: ({microphoneId?: string, camerId?: string}) => boolean
在 createStream 之后,可以调用该方法切换本地流的媒体输入设备,包括:音频输入设备(如麦克风)和视频输入设备(如摄像头)
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| microphoneId | string | 本次切换的目标音频采集设备 ID | 否 | 无 |
| cameraId | string | 本次切换的目标视频采集设备 ID | 否 | 无 |
注意 设备 ID 可通过 getDevices 获取
返回值
true:成功
false:失败
setScreenParameters({
width?: number,
height?: number,
frameRate?: number,
bitrate?: number
})
在调用 stream.init 之前,调用本接口设置共享屏幕属性,分别设置屏幕分辨率,帧率和码率。
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| width | number | 宽度 | 否 | |
| height | number | 高度 | 否 | |
| frameRate | number | 帧率 | 否 | |
| bitrate | number | 码率 | 否 |
width 和 height 必须同时存在,否则由浏览器自行配置默认值。width,height,frameRate,bitrate 没设置的话,由浏览器自行配置width、height:通常为被分享画面的实际宽高frameRate :由浏览器自动适配bitrate :不受限,由浏览器自动适配width、height、frameRate 都设置了,但是 bitrate 没设置,SDK 会在内部自动计算码率。返回值 无
注意 * 由于设备和浏览器的限制,设置成功后浏览器可能按照实际能力自动调整和适配 * 使用 Safari 浏览器时,如果设置的分辨率比例跟屏幕比例不一致会出现剪裁。
VRTC.Logger
提供设置 logger 的方法,包括设置日志输出等级、开启/关闭日志上传。
| 属性名 | 值 |
|---|---|
| VERBOSE | -1 |
| DEBUG | 0 |
| TRACE | 1 |
| INFO | 2 |
| WARNING | 3 |
| ERROR | 4 |
| NONE | 5 |
| 返回 | 名称 |
|---|---|
| 无 | setLogLevel |
设置日志输出等级
setLogLevel(level: LogLevel): void
参数
| 参数名 | 类型 | 说明 | 必填 | 默认值 |
|---|---|---|---|---|
| level | LogLevel | 日志等级 | 是 |
注意
1.LogLevel 为 logger 成员常量:VERBOSE ,DEBUG ,TRACE ,INFO ,WARNING ,ERROR ,NONE
2.默认输出等级为 WARNING 。
3.LogLevel 中各个等级日志输出量递减。